package club.xyes.zkh.ecommerce.dao.mapper;

import club.xyes.zkh.ecommerce.commons.dto.AccessLogExportData;
import club.xyes.zkh.ecommerce.commons.entity.UserAccessShopLog;
import club.xyes.zkh.ecommerce.dao.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * Create by 郭文梁 2019/4/18 0018 13:59
 * UserAccessShopLogMapper
 * 用户商铺访问记录相关数据库访问对象
 *
 * @author 郭文梁
 * @data 2019/4/18 0018
 */
@Repository
public interface UserAccessShopLogMapper extends BaseMapper<UserAccessShopLog> {
    /**
     * 计算用户在商铺消费的次数
     *
     * @param shopId 商铺ID
     * @param userId 用户ID
     * @return 消费次数
     */
    int countByShopIdAndUserId(@Param("shopId") Integer shopId, @Param("userId") Integer userId);

    /**
     * 通过用户ID查找访问记录 同时关联查询关联对象
     *
     * @param userId 用户ID
     * @return log list
     */
    List<UserAccessShopLog> selectByUserIdFetchAll(@Param("userId") Integer userId);

    /**
     * 根据商铺ID查询用户访问商铺的记录
     *
     * @param shopId 商铺ID
     * @return 访问记录
     */
    List<UserAccessShopLog> selectByShopIdFetchAll(@Param("shopId") Integer shopId);

    /**
     * 通过商铺ID查询访问记录 数据结果以时间排序
     *
     * @param shopId        商铺ID
     * @param order         排序方式
     * @param usernameQuery 用户名查询字符串
     * @return log list
     */
    List<UserAccessShopLog> selectByShopIdOrderByTimeFetchAll(@Param("shopId") Integer shopId,
                                                              @Param("usernameQuery") String usernameQuery,
                                                              @Param("order") String order);

    /**
     * 通过店铺ID查询消费用户 按用户的消费金额排序
     *
     * @param shopId        商铺ID
     * @param order         排序方式
     * @param usernameQuery 用户名查询字符串
     * @return log list
     */
    List<UserAccessShopLog> selectByShopIdOrderByAmountFetchAll(@Param("shopId") Integer shopId,
                                                                @Param("usernameQuery") String usernameQuery,
                                                                @Param("order") String order);

    /**
     * 根据商铺ID查询范文用户 根据消费次数排序
     *
     * @param shopId        商铺ID
     * @param order         排序方式
     * @param usernameQuery 用户名查询字符串
     * @return log list
     */
    List<UserAccessShopLog> selectByShopIdOrderByFrequency(@Param("shopId") Integer shopId,
                                                           @Param("usernameQuery") String usernameQuery,
                                                           @Param("order") String order);

    /**
     * 根据商铺ID查询访问用户 按用户会员等级排序
     *
     * @param shopId        商铺ID
     * @param order         排序方式
     * @param usernameQuery 用户名查询字符串
     * @return log list
     */
    List<UserAccessShopLog> selectByShopIdOrderByLevel(@Param("shopId") Integer shopId,
                                                       @Param("usernameQuery") String usernameQuery,
                                                       @Param("order") String order);

    /**
     * 通过商铺ID和用户名模糊查询用户的访问记录
     *
     * @param shopId        商铺ID
     * @param usernameQuery 用户名查询字符串
     * @return log list
     */
    List<UserAccessShopLog> selectByShopIdAndLikeUsername(@Param("shopId") Integer shopId,
                                                          @Param("usernameQuery") String usernameQuery);

    /**
     * 通过商家Id查询导出数据
     *
     * @param shopId 商家ID
     * @return 倒出数据
     */
    List<AccessLogExportData> selectExportDataByShopId(@Param("shopId") Integer shopId);
}
